/**
 * 导入必要的模块
 */
import express from 'express'
import multer from 'multer'
import cors from 'cors'
import fs from 'node:fs'
import path from 'node:path'

/**
 * 配置文件存储方式
 */
const storage = multer.diskStorage({
    destination: (req, file, cb) => {
        // 指定文件上传的目录
        cb(null, 'uploads/')
    },
    filename: (req, file, cb) => {
        // 指定文件名，使用请求体中的index和fileName组合
        cb(null, `${req.body.index}-${req.body.fileName}`)
    }
})
const upload = multer({ storage })

// 初始化express应用
const app = express()

// 允许跨域请求
app.use(cors())
// 解析请求体中的JSON数据
app.use(express.json())

/**
 * 处理文件上传的路由
 */
app.post('/up', upload.single('file'), (req, res) => {
    // 文件上传成功后返回'ok'
    res.send('ok')
})

/**
 * 处理文件合并的路由
 */
app.post('/merge', async (req, res) => {
    // 定义上传文件目录
    const uploadPath = './uploads'
    // 读取上传目录下的所有文件并按index排序
    let files = fs.readdirSync(path.join(process.cwd(), uploadPath))
    files = files.sort((a, b) => a.split('-')[0] - b.split('-')[0])
    // 定义合并后文件的写入路径
    const writePath = path.join(process.cwd(), `video`, `${req.body.fileName}.mp4`)
    // 循环读取并合并文件，完成后删除原文件
    files.forEach((item) => {
        fs.appendFileSync(writePath, fs.readFileSync(path.join(process.cwd(), uploadPath, item)))
        fs.unlinkSync(path.join(process.cwd(), uploadPath, item))
    })

    // 合并文件成功后返回'ok'
    res.send('ok')
})

// 启动服务器监听3000端口
app.listen(3000, () => {
    console.log('Server is running on port 3000')
})